

interface InA{
  name:string;
  age?:number;
  sex:boolean;
}
// 全部变成readonly 属性
type MyReadOnly<T> = {
  // 写代码 将 泛型T 里面的属性全部都变成只读属性
  readonly [K in keyof T]:T[K] // 循环name ==> readonly InA[name]
}

// let obj:MyReadOnly<InA> = {
//   name:'string'
// }

// obj.name = '张三'

// obj//?

// 摘取属性
type MyPick<T extends object,K extends keyof T> = {
  [P in K] : T[P]
}
// 摘 
let bb:MyPick<InA,'name' | 'age'> = {
  name:'',
}
// 全部变成可选项 
type MyPartial<T extends object> = {
  [K in keyof T]? : T[K]
}
let c : Partial<InA> ={
  
}
// ts 类型的变换 ts用在项目中
// 装饰器 命名空间  react + hooks / vue : 3.0
// nest 



